<?php
// 系统配置文件

// 管理员密码（请修改为更安全的密码）
define('ADMIN_PASSWORD', 'admin123');

// 数据存储目录
define('DATA_DIR', 'visitor_data');
define('PHOTO_DIR', DATA_DIR . '/photos');

// 文件大小限制（字节）
define('MAX_PHOTO_SIZE', 5 * 1024 * 1024); // 5MB

// 允许的图片格式
define('ALLOWED_IMAGE_TYPES', ['jpeg', 'jpg', 'png', 'gif']);

// 时区设置
define('TIMEZONE', 'Asia/Shanghai');

// 安全设置
define('ENABLE_IP_LOGGING', true);
define('ENABLE_USER_AGENT_LOGGING', true);
define('ENABLE_REFERER_LOGGING', true);

// 功能开关
define('ENABLE_GPS_TRACKING', true);
define('ENABLE_PHOTO_CAPTURE', true);
define('ENABLE_ADMIN_PANEL', true);

// 清理设置
define('AUTO_CLEANUP_DAYS', 30); // 自动清理30天前的数据
define('ENABLE_AUTO_CLEANUP', false);

// 访问限制
define('ENABLE_RATE_LIMITING', true);
define('MAX_REQUESTS_PER_HOUR', 10);

// 错误报告
define('ENABLE_ERROR_LOGGING', true);
define('ERROR_LOG_FILE', DATA_DIR . '/error.log');

// 初始化函数
function initializeSystem() {
    // 设置时区
    date_default_timezone_set(TIMEZONE);
    
    // 创建必要的目录
    if (!file_exists(DATA_DIR)) {
        mkdir(DATA_DIR, 0755, true);
    }
    
    if (!file_exists(PHOTO_DIR)) {
        mkdir(PHOTO_DIR, 0755, true);
    }
    
    // 创建.htaccess文件保护数据目录
    $htaccessContent = "Order Deny,Allow\nDeny from all\n";
    file_put_contents(DATA_DIR . '/.htaccess', $htaccessContent);
    
    // 创建index.php文件防止目录浏览
    $indexContent = "<?php\n// Access denied\nheader('HTTP/1.0 403 Forbidden');\nexit('Access denied');\n?>";
    file_put_contents(DATA_DIR . '/index.php', $indexContent);
    file_put_contents(PHOTO_DIR . '/index.php', $indexContent);
}

// 获取客户端IP地址
function getClientIP() {
    $ipKeys = ['HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'REMOTE_ADDR'];
    foreach ($ipKeys as $key) {
        if (array_key_exists($key, $_SERVER) === true) {
            foreach (explode(',', $_SERVER[$key]) as $ip) {
                $ip = trim($ip);
                if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false) {
                    return $ip;
                }
            }
        }
    }
    return $_SERVER['REMOTE_ADDR'] ?? 'unknown';
}

// 记录错误日志
function logError($message) {
    if (ENABLE_ERROR_LOGGING) {
        $timestamp = date('Y-m-d H:i:s');
        $logMessage = "[$timestamp] $message\n";
        file_put_contents(ERROR_LOG_FILE, $logMessage, FILE_APPEND | LOCK_EX);
    }
}

// 检查访问频率限制
function checkRateLimit($ip) {
    if (!ENABLE_RATE_LIMITING) {
        return true;
    }
    
    $rateLimitFile = DATA_DIR . '/rate_limit.json';
    $currentTime = time();
    $oneHourAgo = $currentTime - 3600;
    
    $rateLimitData = [];
    if (file_exists($rateLimitFile)) {
        $rateLimitData = json_decode(file_get_contents($rateLimitFile), true) ?? [];
    }
    
    // 清理过期数据
    foreach ($rateLimitData as $recordedIP => $timestamps) {
        $rateLimitData[$recordedIP] = array_filter($timestamps, function($timestamp) use ($oneHourAgo) {
            return $timestamp > $oneHourAgo;
        });
        
        if (empty($rateLimitData[$recordedIP])) {
            unset($rateLimitData[$recordedIP]);
        }
    }
    
    // 检查当前IP的请求次数
    $ipRequests = $rateLimitData[$ip] ?? [];
    if (count($ipRequests) >= MAX_REQUESTS_PER_HOUR) {
        return false;
    }
    
    // 记录当前请求
    $rateLimitData[$ip][] = $currentTime;
    file_put_contents($rateLimitFile, json_encode($rateLimitData));
    
    return true;
}

// 系统初始化
initializeSystem();
?>